package com.chushouya.product.service.admin.impl;

import com.general.framework.core.lang.Beans;
import com.general.framework.core.lang.Check;
import com.general.framework.core.schema.PageResult;
import com.chushouya.product.dao.entity.TempEvaluateItemEntity;
import com.chushouya.product.dao.repository.TempEvaluateItemRepository;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemDetailDTO;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemListDTO;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemQuery;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemSaveDTO;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemUpdateDTO;
import com.chushouya.product.service.admin.TempEvaluateItemService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 模板估价项目业务实现
 */
@Service
public class TempEvaluateItemServiceImpl implements TempEvaluateItemService {

    @Resource
    private TempEvaluateItemRepository tempEvaluateItemRepository;

    @Override
    public PageResult<TempEvaluateItemListDTO> selectTempEvaluateItemPageResult(TempEvaluateItemQuery query) {
        Check.notNull(query, "查询参数不能为空");
        
        PageResult<TempEvaluateItemEntity> pageResult = tempEvaluateItemRepository.selectPageResult(query);
        return PageResult.of(pageResult, TempEvaluateItemListDTO.class);
    }

    @Override
    public List<TempEvaluateItemListDTO> selectTempEvaluateItemList(TempEvaluateItemQuery query) {
        Check.notNull(query, "查询参数不能为空");
        
        List<TempEvaluateItemEntity> list = tempEvaluateItemRepository.selectList(query);
        return Beans.copyList(list, TempEvaluateItemListDTO.class);
    }

    @Override
    public TempEvaluateItemDetailDTO getTempEvaluateItemDetail(Long tempItemId) {
        Check.notNull(tempItemId, "模板估价项目ID不能为空");
        
        TempEvaluateItemEntity entity = tempEvaluateItemRepository.selectByPrimaryKey(tempItemId);
        Check.notNull(entity, "模板估价项目不存在");
        
        return Beans.copy(entity, TempEvaluateItemDetailDTO.class);
    }

    @Override
    public Long addTempEvaluateItem(TempEvaluateItemSaveDTO tempEvaluateItem) {
        Check.notNull(tempEvaluateItem, "模板估价项目信息不能为空");
        Check.notNull(tempEvaluateItem.getTempId(), "模板ID不能为空");
        Check.notNull(tempEvaluateItem.getItemId(), "项目ID不能为空");
        
        TempEvaluateItemEntity entity = Beans.copy(tempEvaluateItem, TempEvaluateItemEntity.class);
        
        tempEvaluateItemRepository.insertSelective(entity);
        return entity.getTempItemId();
    }

    @Override
    public Long editTempEvaluateItem(TempEvaluateItemUpdateDTO tempEvaluateItem) {
        Check.notNull(tempEvaluateItem, "模板估价项目信息不能为空");
        Check.notNull(tempEvaluateItem.getTempItemId(), "模板估价项目ID不能为空");
        
        TempEvaluateItemEntity existEntity = tempEvaluateItemRepository.selectByPrimaryKey(tempEvaluateItem.getTempItemId());
        Check.notNull(existEntity, "模板估价项目不存在");
        
        TempEvaluateItemEntity entity = Beans.copy(tempEvaluateItem, TempEvaluateItemEntity.class);
        
        tempEvaluateItemRepository.updateByPrimaryKeySelective(entity);
        return entity.getTempItemId();
    }

    @Override
    public void removeTempEvaluateItem(Long tempItemId) {
        Check.notNull(tempItemId, "模板估价项目ID不能为空");
        
        TempEvaluateItemEntity existEntity = tempEvaluateItemRepository.selectByPrimaryKey(tempItemId);
        Check.notNull(existEntity, "模板估价项目不存在");
        
        tempEvaluateItemRepository.deleteByPrimaryKey(tempItemId);
    }

    @Override
    public List<TempEvaluateItemListDTO> selectTempEvaluateItemListByTempId(Long tempId) {
        Check.notNull(tempId, "模板ID不能为空");
        
        TempEvaluateItemQuery query = new TempEvaluateItemQuery();
        query.setTempId(tempId);
        
        List<TempEvaluateItemEntity> list = tempEvaluateItemRepository.selectList(query);
        return Beans.copyList(list, TempEvaluateItemListDTO.class);
    }

    @Override
    public List<TempEvaluateItemListDTO> selectTempEvaluateItemListByItemId(Long itemId) {
        Check.notNull(itemId, "项目ID不能为空");
        
        TempEvaluateItemQuery query = new TempEvaluateItemQuery();
        query.setItemId(itemId);
        
        List<TempEvaluateItemEntity> list = tempEvaluateItemRepository.selectList(query);
        return Beans.copyList(list, TempEvaluateItemListDTO.class);
    }
}
